home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1994 December / PSL Monthly Shareware CD-ROM (Public Software Library)(December 1994).bin / prgmming / dos / asm / tsrtest.asm < prev    next >
Assembly Source File  |  1990-10-02  |  2KB  |  64 lines

  1.     .286
  2.     .MODEL  LARGE
  3.     .STACK
  4.     .DATA
  5.  
  6. pspseg  DW      0
  7. prev    DB      0
  8.  
  9.     .CODE
  10.  
  11.     assume  ds:DGROUP
  12. old1c   dd      0
  13.  
  14. tsr     PROC    FAR
  15.     push    ds
  16.     push    es
  17.     pusha                           ; save registers and segments of
  18.     mov     ax,DGROUP               ; previous program
  19.     mov     ds,ax
  20.     mov     ax,40H
  21.     mov     es,ax                   ; set extended segment to get key
  22.     mov     al,es:[17H]             ; status
  23.     and     al,1CH                  ; if it's 10H, scroll lock pressed
  24.     cmp     al,prev                 ; compare to it's previous state
  25.     je      endit                   ; if it's not changed, exit
  26.     mov     prev,al                 ; set new previous state
  27.     cmp     al,1CH                  ; if changed, is it a 1?
  28.     jne     endit                   ; no, exit
  29.     mov     ah,00H                  ; SETVIDEOMODE subfunction
  30.     mov     al,03H                  ; Mode#3 80x25x16 TEXT
  31.     int     10H                     ; set mode
  32. endit:  popa                            ; restore registers and segments
  33.     pop     es
  34.     pop     ds
  35.     jmp     old1c                   ; jump back to previous program
  36. tsr     endp
  37. ;
  38. ; First run of program starts HERE!
  39. ; Shift TSR procedure to TSR memory
  40. ;
  41. start:  mov     ax,DGROUP               ; set DGROUP for storage of resident
  42.     mov     ds,ax
  43.     mov     ax,es
  44.     mov     pspseg,ax               ; set vector to point to TSR proc
  45.     mov     ax,351CH
  46.     int     21H                     ; set vector
  47.     mov     WORD PTR old1c,bx       ; get segments of previous program
  48.     mov     WORD PTR old1c+2,es
  49.     push    ds                      ; store current DS
  50.     lea     dx,tsr                  ; move address of start of TSR
  51.     mov     ax,cs                   ; routine to DX
  52.     mov     ds,ax
  53.     mov     ax,251CH
  54.     int     21H                     ; timer tick routine
  55.     pop     ds
  56.     mov     dx,ss
  57.     sub     dx,pspseg               ; get amount of memory of only TSR
  58.     mov     ax,3100H                ; routine so only it will be stored
  59.     int     21h                     ; shift to TSR
  60.     end     start
  61.  
  62.     .EXIT
  63.     END
  64.